package com.cskaoyan.javase.oop1._13block._3static;
/**
 * 静态代码块
 * 语法:
 * 静态代码块也声明在类的成员位置,使用以下语法:
 * static{
 *
 * }
 * 作用: 可以把静态代码块看成是一个在类加载过程中,自动被调用的静态成员方法
 *      用于给类的静态成员变量赋值
 *
 * 总结,在类加载过程中,给静态成员变量赋值的手段:
 *      1.默认初始化,具有默认值
 *      2.显式赋值
 *      3.静态代码块赋值
 * 其中默认初始化是永远的第一步,
 *      显式赋值和静态代码块赋值会按照代码的书写顺序从上到下执行
 *
 * 静态代码块在实际开发中，并不常见。
 * 根据它的一些特点，可以总结一下它的使用场景
 * 1.复杂的静态成员变量的赋值。
 * JavaEE中加载JDBC驱动（最经典的），也可能是最常见的。
 *
 * 2.如果有一段代码，在类的全局，从始至终，只运行一次，可以写到静态代码块中。（依赖于类加载只有一次的原理）
 * 比如一些初类的始化工作，就可以放在静态代码块中完成。
 *
 * 最常见的就是类System的初始化
 *
 *
 * @since 11:13
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        /*
            System.out是类System的一个静态引用数据类型成员变量
            是一个对象
         */
        System.out.println(Student.name);
    }
}

class Student{
    // 静态代码块
    static {
        name = "李四";
    }
    static String name = "张三";

}
